import tab from './tab'
import auth from './auth'
import cache from './cache'
import modal from './modal'
import download from './download'
import '@/plugins/vxe-table'
import directive from '@/directive'
import { getDicts } from '@/api/system/dict/data'
import { getConfigKey } from '@/api/system/config'
import {
  parseTime,
  resetForm,
  addDateRange,
  selectDictLabel,
  selectDictLabels,
  handleTree,
} from '@/utils/ruoyi'

// 分页组件
import Pagination from '@/components/Pagination'
// 自定义表格工具组件
import RightToolbar from '@/components/RightToolbar'
// 富文本组件
import Editor from '@/components/Editor'
// 文件上传组件
import FileUpload from '@/components/FileUpload'
// 图片上传组件
import ImageUpload from '@/components/ImageUpload'
// 图片预览组件
import ImagePreview from '@/components/ImagePreview'
// 字典标签组件
import DictTag from '@/components/DictTag'
// 头部标签组件
import VueMeta from 'vue-meta'
// 字典数据组件
// 字典数据组件
import DictData from '@/components/DictData'
import ButtonPro from '@/components/ButtonHoc'
import Grid from '@/components/VxeGrid'
import BoxItem from '@/components/BoxItem'
import dataV from '@jiaminghi/data-view'

export default {
  install(Vue) {
    // 页签操作
    Vue.prototype.$tab = tab
    // 认证对象
    Vue.prototype.$auth = auth
    // 缓存对象
    Vue.prototype.$cache = cache
    // 模态框对象
    Vue.prototype.$modal = modal
    // 下载文件
    Vue.prototype.$download = download

    Vue.prototype.getDicts = getDicts
    Vue.prototype.getConfigKey = getConfigKey
    Vue.prototype.parseTime = parseTime
    Vue.prototype.resetForm = resetForm
    Vue.prototype.addDateRange = addDateRange
    Vue.prototype.selectDictLabel = selectDictLabel
    Vue.prototype.selectDictLabels = selectDictLabels
    Vue.prototype.download = download
    Vue.prototype.handleTree = handleTree

    // 全局组件挂载
    Vue.component('DictTag', DictTag)
    Vue.component('Pagination', Pagination)
    Vue.component('RightToolbar', RightToolbar)
    Vue.component('Editor', Editor)
    Vue.component('FileUpload', FileUpload)
    Vue.component('ImageUpload', ImageUpload)
    Vue.component('ImagePreview', ImagePreview)
    Vue.component('ButtonPro', ButtonPro)
    Vue.component('Grid', Grid)
    Vue.component('BoxItem', BoxItem)

    Vue.use(dataV)
    Vue.use(directive)
    Vue.use(VueMeta)
    DictData.install()
  },
}
